package cn.rwklyd.BookKeeping.service;

import cn.rwklyd.BookKeeping.pojo.Category;
import cn.rwklyd.BookKeeping.pojo.Result;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

public interface CategoryService extends IService<Category> {
    
    /**
     * 添加分类
     * @param category 分类信息
     * @return 添加结果
     */
    Result<String> addCategory(Category category);
    
    /**
     * 删除分类
     * @param id 分类ID
     * @return 删除结果
     */
    Result<String> deleteCategory(Integer id);
    
    /**
     * 更新分类
     * @param category 分类信息
     * @return 更新结果
     */
    Result<String> updateCategory(Category category);
    
    /**
     * 根据ID获取分类
     * @param id 分类ID
     * @return 分类信息
     */
    Result<Category> getCategoryById(Integer id);
    
    /**
     * 分页获取当前用户的分类列表
     * @param page 页码
     * @param pageSize 每页大小
     * @param name 分类名称（可选，用于搜索）
     * @return 分类列表
     */
    Result<IPage<Category>> getCategoryList(Integer page, Integer pageSize, String name);
    
    /**
     * 获取当前用户的所有分类
     * @return 分类列表
     */
    Result<List<Category>> getAllCategories();
    
    /**
     * 多条件查询分类
     * @param id 分类ID (可选)
     * @param name 分类名称 (可选)
     * @param spend 是否属于支出 (可选)
     * @param userId 用户ID (可选，管理员可查询特定用户的分类)
     * @param page 页码 (可选，默认1)
     * @param pageSize 每页大小 (可选，默认10)
     * @return 分类列表
     */
    Result<IPage<Category>> queryCategories(Integer id, String name, Integer spend, Integer userId, Integer page, Integer pageSize);
    
    /**
     * 切换分类状态
     * @param id 分类ID
     * @return 更新结果
     */
    Result<String> updateCategoryStatus(Integer id);
} 